/*!
 * \file ExpParser.cpp
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 扩展行情解析器实现
 * 
 * \details 本文件实现了扩展行情解析器类ExpParser的所有接口方法：
 *          - 实现行情解析器生命周期管理
 *          - 支持连接管理和状态控制
 *          - 支持合约订阅和退订
 *          - 支持回调接口注册
 *          - 通过WtDtRunner转发事件到数据服务系统
 *          - 提供统一的行情解析器接口
 */
#include "ExpParser.h"
#include "WtDtRunner.h"

extern WtDtRunner& getRunner();

/**
 * @brief 初始化解析器
 * @details 根据配置参数初始化扩展行情解析器，通知数据运行器解析器已初始化
 * @param config 配置参数对象
 * @return bool 初始化是否成功（总是返回true）
 */
bool ExpParser::init(WTSVariant* config)
{
	getRunner().parser_init(_id.c_str());
	return true;
}

/**
 * @brief 释放解析器
 * @details 释放解析器资源，清理连接和状态，通知数据运行器解析器已释放
 */
void ExpParser::release()
{
	getRunner().parser_release(_id.c_str());
}

/**
 * @brief 连接行情数据源
 * @details 建立与外部行情数据源的连接，通知数据运行器解析器已连接
 * @return bool 连接是否成功（总是返回true）
 */
bool ExpParser::connect()
{
	getRunner().parser_connect(_id.c_str());
	return true;
}

/**
 * @brief 断开行情数据源连接
 * @details 断开与外部行情数据源的连接，通知数据运行器解析器已断开
 * @return bool 断开是否成功（总是返回true）
 */
bool ExpParser::disconnect()
{
	getRunner().parser_disconnect(_id.c_str());
	return true;
}

/**
 * @brief 订阅合约行情
 * @details 订阅指定合约的实时行情数据，逐个通知数据运行器订阅合约
 * @param setCodes 合约代码集合
 */
void ExpParser::subscribe(const CodeSet& setCodes)
{
	for(const auto& code : setCodes)
		getRunner().parser_subscribe(_id.c_str(), code.c_str());
}

/**
 * @brief 退订合约行情
 * @details 退订指定合约的实时行情数据，逐个通知数据运行器退订合约
 * @param setCodes 合约代码集合
 */
void ExpParser::unsubscribe(const CodeSet& setCodes)
{
	for (const auto& code : setCodes)
		getRunner().parser_unsubscribe(_id.c_str(), code.c_str());
}

/**
 * @brief 注册解析器回调接口
 * @details 注册解析器事件和数据回调接口，获取基础数据管理器
 * @param listener 回调接口对象
 */
void ExpParser::registerSpi(IParserSpi* listener)
{
	m_sink = listener;

	if (m_sink)
		m_pBaseDataMgr = m_sink->getBaseDataMgr();
}
